import { defineStore } from "pinia";

// 定义用户角色类型
type UserRole = "ADMIN" | "TEACHER";

// 定义用户信息接口
interface User {
    id: string; // 用户ID
    userName?: string | null; // 用户名（可选）
    password?: string | null; // 密码（可选）
    name?: string | null; // 姓名（可选）
    phone?: string | null; // 电话号码（可选）
    avatar?: string | null; // 头像URL（可选）
    description?: string | null; // 描述（可选）
    status: number; // 用户状态
    salt?: string | null; // 加密盐值（可选）
    roles: UserRole[]; // 用户角色列表
}

// 定义状态接口
interface UserState {
    user: User | null; // 用户信息
    token: string | null; // JWT Token
}

// 创建 userStore
export const useUserStore = defineStore("user", {
    state: (): UserState => ({
        user: null, // 初始状态为 null
        token: localStorage.getItem("token") || null, // 从 localStorage 获取 token，没有则为 null
    }),
    getters: {
        // 获取用户角色
        getUserRoles(state): UserRole[] {
            return state.user?.roles || [];
        },
        // 检查用户是否具有某个角色
        hasRole: (state) => (role: UserRole): boolean => {
            return state.user?.roles.includes(role) || false;
        },
        // 判断用户是否已登录
        isLogin(state): boolean {
            return !!state.token; // 如果 token 存在，则认为已登录
        },
    },
    actions: {
        // 设置用户信息和 token
        setUserAndToken(user: User, token: string) {
            this.user = user;
            this.token = token;
            localStorage.setItem("token", token); // 将 token 存入 localStorage
        },
        // 清除用户信息和 token（登出）
        clearUserAndToken() {
            this.user = null;
            this.token = null;
            localStorage.removeItem("token"); // 从 localStorage 中移除 token
        },
        // 更新用户信息
        updateUser(updatedUser: Partial<User>) {
            if (this.user) {
                this.user = { ...this.user, ...updatedUser };
            }
        },
    },
});
